package com.my.house.common;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Collections;
import java.util.List;

/**
 * @author yangll
 * @param <T>
 */
@Data
@NoArgsConstructor
public class PageResult<T> implements Serializable {

    /**
     * 记录总数
     */
    private int total;

    /**
     * 响应状态码 0正常 others异常
     */
    protected int code;

    /**
     * 响应状态描述
     */
    protected String message;

    /**
     * 响应数据实体
     */
    protected List<T> data;

    /**
     * 分页成功返回
     * @param list 列表数据
     * @param total 总记录数
     */
    public static <T> PageResult<T> ok(List<T> list, long total) {
        PageResult<T> rspData = new PageResult();
        rspData.setCode(0);
        rspData.setMessage("请求完成");
        rspData.setTotal((int) total);
        rspData.setData(list);
        return rspData;
    }

    /**
     * 分页成功返回
     * @param page mp分页对象
     */
    public static <T> PageResult<T> ok(Page<T> page) {
        PageResult<T> rspData = new PageResult();
        rspData.setCode(0);
        rspData.setMessage("请求完成");
        rspData.setTotal((int) page.getTotal());
        rspData.setData(page.getRecords());
        return rspData;
    }

    public static PageResult error(String msg) {
        PageResult rspData = new PageResult();
        rspData.setCode(ApiResult.ERROR);
        rspData.setMessage(msg);
        return rspData;
    }

    /**
     * 分页成功返回
     */
    public static <T> PageResult<T> empty() {
        PageResult<T> rspData = new PageResult();
        rspData.setCode(0);
        rspData.setMessage("请求完成");
        rspData.setTotal(0);
        rspData.setData(Collections.EMPTY_LIST);
        return rspData;
    }
}
